home *** CD-ROM | disk | FTP | other *** search
/ PC World Interactive 7 / PC World Interactive 7.iso / program / ctutor.exe / SOURCE / DYNLINK.C < prev    next >
C/C++ Source or Header  |  1994-05-15  |  3KB  |  70 lines

  1.                              /* Chapter 12 - Program 3 - DYNLINK.C */
  2. #include "stdio.h"        /* this is needed to define the NULL     */
  3. #include "string.h"
  4. #include "stdlib.h"
  5. #define RECORDS 6
  6.  
  7. struct animal {
  8.    char name[25];        /* The animals name                       */
  9.    char breed[25];       /* The type of animal                     */
  10.    int  age;             /* The animals age                        */
  11.    struct animal *next;  /* pointer to another struct of this type */
  12. } *point, *start, *prior; /* this defines 3 pointers, no variables */
  13.  
  14. void main()
  15. {
  16. int index;
  17.  
  18.       /* the first record is always a special case                 */
  19.    start = (struct animal *)malloc(sizeof(struct animal));
  20.    strcpy(start->name, "General");
  21.    strcpy(start->breed, "Mixed Breed");
  22.    start->age = 4;
  23.    start->next = NULL;
  24.    prior = start;
  25.  
  26.       /* a loop can be used to fill in the rest once it is started */
  27.    for (index = 0 ; index < RECORDS ; index++) {
  28.       point = (struct animal *)malloc(sizeof(struct animal));
  29.       strcpy(point->name, "Frank");
  30.       strcpy(point->breed, "Laborador Retriever");
  31.       point->age = 3;
  32.       prior->next = point;  /* point last "next" to this record    */
  33.       point->next = NULL;   /* point this "next" to NULL           */
  34.       prior = point;        /* this is now the prior record        */
  35.    }
  36.  
  37.       /* now print out the data described above                    */
  38.    point = start;
  39.    do {
  40.       prior = point->next;
  41.       printf("%s is a %s, and is %d years old.\n",
  42.                               point->name, point->breed, point->age);
  43.       point = point->next;
  44.    } while (prior != NULL);
  45.  
  46.       /* good programming practice dictates that we free up the    */
  47.       /* dynamically allocated space before we quit.               */
  48.  
  49.    point = start;            /* first block of group               */
  50.    do {
  51.       prior = point->next;   /* next block of data                 */
  52.       free(point);           /* free present block                 */
  53.       point = prior;         /* point to next                      */
  54.    } while (prior != NULL);  /* quit when next is NULL             */
  55. }
  56.  
  57.  
  58.  
  59. /* Result of execution
  60.  
  61. General is a Mixed Breed, and is 4 years old.
  62. Frank is a Laborador Retriever, and is 3 years old.
  63. Frank is a Laborador Retriever, and is 3 years old.
  64. Frank is a Laborador Retriever, and is 3 years old.
  65. Frank is a Laborador Retriever, and is 3 years old.
  66. Frank is a Laborador Retriever, and is 3 years old.
  67. Frank is a Laborador Retriever, and is 3 years old.
  68.  
  69. */
  70.